﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MvcCaja.Core.Interfaces;
using MvcCaja.Dal.Models;

namespace MvcCaja.Core
{
    public class BovedaService : IBovedaService
    {
        public List<Boveda> ObtenerTodos()
        {



            ModelDataContext db = new ModelDataContext();

            return (from n in db.Boveda
                    select n).ToList<Boveda>();
        }

        public List<MovimientoBoveda> ListarMovimientos()
        {
            ModelDataContext db = new ModelDataContext();

            return (from n in db.MovimientoBovedas
                    select n).ToList<MovimientoBoveda>();
        }

        public List<MovimientoBoveda> ListarMovimientos(DateTime fecIni, DateTime fecFin, string caja, string empleado)
        {
            ModelDataContext db = new ModelDataContext();            

            return (from n in db.MovimientoBovedas
                    where n.IdCaja.Contains(caja) && n.IdCajero.Contains(empleado) &&
                    n.FechaHoraMovimiento.Date >= fecIni.Date && n.FechaHoraMovimiento.Date <= fecFin.Date &&
                    n.FechaAnulacion == null
                    select n).ToList<MovimientoBoveda>();
        }

        public string insertar(String sCodigoBoveda, String sCodigoCaja, String sCodigoTurno, String sCodigoCajero, String sTipoMovimiento, Decimal dMontoMovimiento)
        {
            try
            {
                ModelDataContext db = new ModelDataContext();

                MovimientoBoveda oMovimientoBoveda = new MovimientoBoveda();
                oMovimientoBoveda.IdBoveda = sCodigoBoveda;
                oMovimientoBoveda.IdCaja = sCodigoCaja;
                oMovimientoBoveda.IdTurno = sCodigoTurno;
                oMovimientoBoveda.IdCajero = sCodigoCajero;
                oMovimientoBoveda.TipoMovimiento = sTipoMovimiento;
                oMovimientoBoveda.MontoMovimiento = dMontoMovimiento;
                oMovimientoBoveda.FechaHoraMovimiento = DateTime.Now;

                db.MovimientoBovedas.InsertOnSubmit(oMovimientoBoveda);
                db.SubmitChanges();

                return "success";
            }
            catch (Exception ex)
            {
                return ex.Message;
            }    

        }

        public string anular(String sCodigoBoveda, String sCodigoAdministrador, String sConcepto)
        {
            try
            {
                ModelDataContext db = new ModelDataContext();

                MovimientoBoveda oMovimientoBoveda = (from n in db.MovimientoBovedas
                                             where n.IdBoveda.Equals(sCodigoBoveda)
                                             select n).First<MovimientoBoveda>();


                oMovimientoBoveda.FechaAnulacion = DateTime.Now;
                oMovimientoBoveda.ConceptoAnulacion = sConcepto;
                oMovimientoBoveda.IdAdministrador = sCodigoAdministrador;
                
                db.SubmitChanges();

                return "success";
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

        public MovimientoBoveda obtenerMovimiento(string codigoBoveda)
        {
            ModelDataContext db = new ModelDataContext();

            return (from n in db.MovimientoBovedas
                    where n.IdBoveda.Equals(codigoBoveda)
                    select n).First<MovimientoBoveda>();
        }
    }
}
